package com.xyazm.order.service;

import com.xyazm.order.domain.dto.CreateOrderDTO;
import com.xyazm.order.domain.dto.PrePayOrderDTO;
import com.xyazm.order.domain.param.*;


public interface IOrderService {


    /**
     * 生成订单号 2.0
     * 使用场景:
     * 调⽤⽅提交订单前需要先调⽤该接⼝获取到⼀个正式的订单号，然后作为下单的接⼝的⼊参。
     * 19位，
     * 起始2位是业务类型，⽐如10开头是正向，20开头是逆向，
     * 中间6位是⽇期，然后中间8位是 序列号，
     * 最后3位是⽤户ID后三位 8位序列号基于数据⾃增主键⽣成,⽤户ID不⾜3位前⾯补0
     * @author xuyou
     * 2022/4/10 0010 20:01
     * @param param
     * @return java.lang.String
    */
    String genOrderId(GenOrderIdParam param);

    /**
     * 创建订单  2.0
     * @author xuyou
     * 2022/4/14 0014 22:02
     * @param param
    */
    CreateOrderDTO createOrder(CreateOrderParam param);

    /**
     * 预支付订单 2.0
     * @author xuyou
     * 2022/6/16 0016 20:59
     * @param param
    */
    PrePayOrderDTO prePayOrder(PrePayOrderParam param);

    /**
     * 支付回调 2.0
     * @author xuyou
     * 2022/6/21 0021 22:39
    */
    void payCallback(PayCallbackParam param);

    /**
     * 删除订单 ok
     * @author xuyou
     * 2022/6/21 0021 22:39
     */
    void removeOrders(RemoveOrderParam param);

    /**
     * 调整收货地址 ok
     * @author xuyou
     * 2022/6/21 0021 22:40
    */
    void adjustDeliveryAddress(AdjustDeliveryAddressParam param);


}
